[2025-07-09] 웹 기초
🦥 본문
HTTP를 이용하여 정보를 공유하는 서비스. Web Server와 Web Client가 정보 교환한다.
프론트엔드와 백엔드
프론트 엔드 : 이용자의 요청을 받는 부분. 이용자에게 직접 보여지는 부분으로 Web Resource라는 것으로 구성된다.
- Web Resource : 웹 상에서 고유한 URI(or URL)를 통해 접근 가능한 모든 대상. EX) HTML, CSS, 이미지, JS 파일, JSON, ….
- URI : Uniform Resource Identifier. 웹에서 자원을 식별하기 위한 표준 형식의 문자열. 어떤 자원이 어디 있는지를 가리키는 방법. URL과 URN이 있음
- URL : 자원의 위치를 알려줌. ex) https://example.com/index.html
- URN : 자원의 이름을 알려 ex) urn:isbn:978-3-16-148410-0
- URI : Uniform Resource Identifier. 웹에서 자원을 식별하기 위한 표준 형식의 문자열. 어떤 자원이 어디 있는지를 가리키는 방법. URL과 URN이 있음
백엔드 : 요청을 처리하는 부분
동작 흐름
- 클라이언트가 브라우저를 통해 웹 서버에 접속
- 브라우저가 사용자의 요청을 해석하여 웹 서버에 웹 리소스를 요청
- 서버가 요청을 해석하고 처리하여 리소스를 클라이언트에게 전달
- 브라우저가 웹 리소스를 받아 렌더링하여 사용자에게 보여줌
인코딩
사람이 이해하거나 시스템이 처리할 수 있도록 특정 형식으로 변환하는 것. 아스키 코드와 유니 코드가 있음.
반대로 디코딩은 변환된 정보를 원래대로 되돌리는 것이다.
통신 프로토콜
통신을 하기 위한 프로토콜(약속, 규칙). Syntax를 지켜서 데이터를 요청-응답한다.
HTTP : 웹 브라우저와 서버가 데이터를 주고 받는 프로토콜
HTTPS : HTTP + SSL/TLS
FTP : 파일 전송 프로토콜. 서버와 파일을 주고받을 때 사용
TCP/IP : TCP는 전송 계층에서의 프로토콜. IP는 인터넷 계층의 프로토콜
HTTP
Hyper Text Transfer Protocol. 웹 브라우저와 웹 서버가 통신할 때 사용하는 규칙. 요청-응답 형식 데이터 교환.
동작 흐름
- 웹 서버는 HTTP 서버를 HTTP 서비스 포트에 대기시킨다. 즉, 웹 서버가 클라이언트가 접속할 수 있도록 포트를 열어놓고 대기하고 있음
- 클라이언트가 서비스 포트에 HTTP 요청을 전송하면 응답함.
- HTTP 서버 : HTTP 프로토콜을 처리하는 데 집중하는 프로그램. 웹 서버 = HTTP 서버 + 부가 기능
- 네트워크 포트 : 전송 계층에서 한 컴퓨터에 여러 애플리케이션을 구분하기 위한 번호. 네트워크에서 서버와 클라이언트가 통신하는 추상화된(논리적) 장소
- 서비스 포트 : 네트워크 포트 중 특정 서비스가 점유하고 있는 포트
- SSH는 22번, HTTP는 80번, HTTPS는 443이 할당
HTTP 헤더
CRLF : Carriage Return (CR, \r : 커서를 맨 앞으로 이동) + Line Feed(LF, \n : 한 줄 아래로 이동)의 조합
바디 외에도 어떤 형식, 정보, 옵션 등이 필요한지 알려주는 메타데이터. HTTP 헤더는 CRLF로 줄이 구분되며 첫 줄은 Start line, 나머지 줄은 Header라고 함. 필드와 값으로들로 구성되어 있다.
HTTP 바디
통신 간 메시지에서 실제 데이터를 담는 부분. 헤더 끝을 나타내는 CRLF 뒤 모든 줄을 말한다.
HTTP 요청
Request Line (시작 줄) : Method + Request Target(URI) + HTTP 프로토콜 버전
Request Headers
빈 줄 (CRLF)
Request Body
//ex
POST /login HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 29
username=admin&password=1234
HTTP 응답
Status Line(상태 라인) : HTTP 프로토콜 버전 + 상태 코드 + Reason Phrase(상태 메시지)
Response Header
빈 줄 (CRLF)
Response Body
//ex
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 48
<html>
<body>Welcome!</body>
</html>
상태 코드 설명 및 예시 : https://developer.mozilla.org/ko/docs/Web/HTTP/Reference/Status
HTTPS
HTTP + SSL/TLS로 HTTP 통신을 암호화한 프로토콜. HTTP는 기본적으로 평문이므로 보안이 없기 대문에 도입된 프로토콜이다.
SSL/TLS
데이터를 암호화하고 인증하는 보안 프로토콜
SSL : Secure Sockets Layer. 초기 버전으로 현재는 사용 하지 않지만 실무에서는 SSL이라 주로 말함
TLS : Transport Layer Security. SSL에서 발전된 표준
- 암호화 : 데이터를 암호화
- 인증 : 서버 또는 클라이언트의 신원을 증명
- 무결성 : 데이터가 변조되지 않았음을 확인
동작 과정 (TLS Handshake. TLS 1.2)
- Client Hello : 클라이언트가 사용할 수 있는 암호화 방식, TLS 버전 등을 보내게 되는 데, client random number(client_random)가 포함된다.
- Server Hello : 서버가 사용할 암호화 방식을 선택하고 서버 인증서와 공개키를 보낸다. 이 때에도 server random number(server_random)가 포함된다
- 서버 인증서 검증 : 클라이언트가 서버 인증서가 유효한지를 CA(인증기관)로 부터 서명을 확인하는 방식으로 검사한다
- Pre-Master Secret 생성 : 클라이언트가 대칭키 생성을 위한 데이터를 서버 공개키로 암호화해서 보낸다
- 대칭키 생성 : 클라이언트와 서버는 동일한 세션 키를 만들어내고 이후의 데이터를 대칭키로 암호화한다.
- FIN 메시지 보낸다
웹 브라우저
웹 사이트를 보기 위한 프로그램
기능 및 동작 흐름
- URL 분석
- DNS 서버와 통신하여 IP 주소 탐색
- HTTP 를 통해 웹 서버와 통신
- 리소스 다운로드 및 웹 랜더링
추가로 JS 실행, 쿠키 세션 관리, 캐시와 기록 저장, 보안 관리(인증서 확인 및 경고 메시지 출력) 등을 수행한다.
URL
웹에 있는 리소스의 위치를 표현하는 문자열
Scheme : 자원에 접근하기 위해 사용되는 프로토콜
Host : 자원이 위치한 서버의 도메인 이름이나 IP 주소
Port : 서버에서 자원에 접근하는 데 사용되는 특정 프로토콜 포트 번호
- Authority = Host + Port
Path : 웹 서버의 리소스 경로
Query : 웹 서버에 전달하는 파라미터
Fragment : 메인 리소스에 존재하는 서브 리소스를 접근할 때 식별하는 정보
DNS
Domain name : 웹사이트를 사람이 읽을 수 있게 만든 주소
DNS : Domain name System. DNS 서버와 통신하여 도메인 이름을 IP 주소로 바꿔주는 시스템
- DNS Resolver : DNS에 주소 권한을 요청하는 프로그램
- 로컬 DNS 서버의 주소가 필요
- DNS 서버에 요청하여 주소를 받아옴
- 한 로컬 DNS 서버가 모든 주소를 가지고 있지 않기 때문에 다른 로컬 DNS 서버에 요청도 함
웹 렌더링
서버로부터 받은 리소스를 해석하여 이용자에게 시각화하는 과정. 웹 렌더링 엔진에 의해서 이뤄짐.
동작 흐름
- HTML 파싱 : DOM 생성
- CSS 파싱 : CSSOM 생성
- DOM + CSSOM 결합 : 렌더 트리 생성
- 레이아수 계산 : 요소들의 크기와 위치 계산
- 페인팅 : 픽셀 단위로 요소들을 시각화
- 디스플레이 : 화면에 최종 결과 출력
개발자 도구
웹사이트를 분석, 디버깅, 최적화하기 위한 도구 모음
요소 검사 : 웹페이지의 HTML 구조와 CSS 스타일을 실시간으로 확인하고 수정할 수 있는 도구
디바이스 툴바 : 다양한 기기 화면 크기로 웹사이트를 테스트할 수 있는 기능
패널 | 설명 |
---|---|
Elements | HTML 구조 및 CSS 확인·수정. |
Console | JS 로그 출력, 에러 확인, JS 코드 직접 실행 |
Sources | JS 코드 디버깅 (중단점, 변수 확인 등) |
Network | 요청/응답 정보 확인 (HTTP 헤더, 상태 코드, 응답 시간 등) |
Application | 쿠키, 로컬스토리지, 세션, 캐시, 서비스 워커 등 웹 어플리케이션과 관련된 데이터 확인 |
Performance | 페이지 렌더링 성능 분석 (Reflow, Paint, JS 실행 시간 등) |
Lighthouse | 웹 성능/접근성/SEO 자동 분석 도구 |
Security | HTTPS, 인증서, Mixed Content 등 보안 상태 확인 |
- Sources
빨강 : 현재 페이지의 리소스 파일 트리, 파일 트리, 파일 시스템
노랑 : 선택한 리소스 상세 보기
초록 : 디버깅 정보
- Watch: 원하는 자바스크립트 식을 입력하면, 코드 실행 과정에서 해당 식의 값 변화를 확인할 수 있습니다.
- Call Stack: 함수들의 호출 순서를 스택 형태로 보여줍니다. 예를 들어,
A → B → C
순서로 함수가 호출되어 현재C
내부의 코드들 실행하고 있다면, Call Stack의 가장 위에는C
, 가장 아래에는A
가 위치합니다. - Scope: 정의된 모든 변수들의 값을 확인할 수 있습니다.
-
Breakpoints: 브레이크포인트들을 확인하고, 각각을 활성화 또는 비활성화할 수 있습니다.
해당 코드를 클릭하여 breakpoint를 만들고 디버깅을 진행할 수 있다.
- Network
빨강 : 로깅 중지 및 로그 전체 삭제
주황 : 로그 필터링 및 검색
초록 : 옵션
- Preserve log: 새로운 페이지로 이동해도 로그를 삭제하지 않습니다.
- Disable cache: 이미 캐시된 리소스도 서버에 요청합니다.
노랑 : 네트워크 로그
파랑 : 네트워크 로그 요약 정보
Copy as fetch를 통해 HTTP Request를 복사하고 Console 패널에 복붙하면 동일한 요청을 서버에 재전송할 수 있음
-
Application
브라우저에 저장된 쿠키 정보를 확인하고 수정할 수 있다
- Ctrl + U 를 통해 페이지 소스 보기를 하여 페이지와 관련되 소스 코드들을 확인할 수 있다
- 시크릿 모드는 : 방문 기록, 쿠키 및 사이트 데이터, 양식에 입력한 정보, 웹사이트에 부여된 권한을 저장하지 않고 탭 간에 쿠키를 공유하지 않는다.
Leave a comment